<?php

require_once 'DAO/Banco.php';
require_once 'DAO/DAOEndereco.php';
require_once 'DAO/DAOBairro.php';
require_once 'DAO/DAOCidade.php';
require_once 'Model/Republica.php';
class DAORepublica extends Banco{
    
    function getRepublicas($limite=0, $quantos=0) {
        $republicas = array();
        Banco::conecta();
        $banco = Banco::getBanco();
        if($limite==0 && $quantos==0){
            $query = "SELECT REP_CODIGO, REP_NOME, REP_CODENDERECO, REP_DESCRICAO_ENDERECO, REP_NUMERO, REP_CODBAIRRO, REP_CODCIDADE, REP_QUANTIAVAGAS, REP_TIPO, REP_DATACRIACAO, REP_ATIVA FROM TB_REPUBLICA WHERE REP_ATIVA='S'ORDER BY RAND()";
        }else{
            if($quantos==0){
                $query = "SELECT REP_CODIGO, REP_NOME, REP_CODENDERECO, REP_DESCRICAO_ENDERECO, REP_NUMERO, REP_CODBAIRRO, REP_CODCIDADE, REP_QUANTIAVAGAS, REP_TIPO, REP_DATACRIACAO, REP_ATIVA FROM TB_REPUBLICA WHERE REP_ATIVA='S' ORDER BY RAND() LIMIT ".$limite;
            }else{
                $query = "SELECT REP_CODIGO, REP_NOME, REP_CODENDERECO, REP_DESCRICAO_ENDERECO, REP_NUMERO, REP_CODBAIRRO, REP_CODCIDADE, REP_QUANTIAVAGAS, REP_TIPO, REP_DATACRIACAO, REP_ATIVA FROM TB_REPUBLICA WHERE REP_ATIVA='S' LIMIT $limite , $quantos;";
            }
        }
        if ($sql = $banco->prepare($query)) {
            $sql->execute();
            $sql->bind_result($id, $nome, $endereco, $descricaoEndereco, $numero, $bairro, $cidade, $vagas, $tipo, $data, $ativa);
            while ($sql->fetch()) {
                $republica = new Republica();
                $de = new DAOEndereco();
                $dc = new DAOCidade();
                $db = new DAOBairro();
                $republica->setBairro($db->getBairro($bairro));
                $republica->setCidade($dc->getCidade($cidade));
                $republica->setCodigo($id);
                $republica->setDescricaoEndereco($descricaoEndereco);
                $republica->setEndereco($de->getEndereco($endereco));
                $republica->setNome($nome);
                $republica->setNumero($numero);
                $republica->setQuantiaVagas($vagas);
                $republica->setTipo($tipo);
                $republica->setDataCriacao($data);
                $republica->setAtiva($ativa);
                $republicas[] = (object)$republica;
            }
            $sql->close();
        }
        $banco->close();
        return $republicas;
    }
    
    function getRepublicasByCidade($cidade, $limite=0, $quantos=0) {
        $republicas = array();
        Banco::conecta();
        $banco = Banco::getBanco();
        if($limite==0  && $quantos==0){
                $query = "SELECT REP_CODIGO, REP_NOME, REP_CODENDERECO, REP_DESCRICAO_ENDERECO, REP_NUMERO, REP_CODBAIRRO, REP_CODCIDADE, REP_QUANTIAVAGAS, REP_TIPO, REP_DATACRIACAO, REP_ATIVA FROM TB_REPUBLICA WHERE REP_ATIVA='S' AND REP_CODCIDADE=$cidade ORDER BY RAND()";
        }else{
            if($quantos==0){
                $query = "SELECT REP_CODIGO, REP_NOME, REP_CODENDERECO, REP_DESCRICAO_ENDERECO, REP_NUMERO, REP_CODBAIRRO, REP_CODCIDADE, REP_QUANTIAVAGAS, REP_TIPO, REP_DATACRIACAO, REP_ATIVA FROM TB_REPUBLICA WHERE REP_ATIVA='S' AND REP_CODCIDADE=$cidade ORDER BY RAND() LIMIT ".$limite;
            }else{
                $query = "SELECT REP_CODIGO, REP_NOME, REP_CODENDERECO, REP_DESCRICAO_ENDERECO, REP_NUMERO, REP_CODBAIRRO, REP_CODCIDADE, REP_QUANTIAVAGAS, REP_TIPO, REP_DATACRIACAO, REP_ATIVA FROM TB_REPUBLICA WHERE REP_ATIVA='S' AND REP_CODCIDADE=$cidade LIMIT $limite , $quantos;";
            }
        }
        if ($sql = $banco->prepare($query)) {
            $sql->execute();
            $sql->bind_result($id, $nome, $endereco, $descricaoEndereco, $numero, $bairro, $cidade, $vagas, $tipo, $data, $ativa);
            while ($sql->fetch()) {
                $republica = new Republica();
                $de = new DAOEndereco();
                $dc = new DAOCidade();
                $db = new DAOBairro();
                $republica->setBairro($db->getBairro($bairro));
                $republica->setCidade($dc->getCidade($cidade));
                $republica->setCodigo($id);
                $republica->setDescricaoEndereco($descricaoEndereco);
                $republica->setEndereco($de->getEndereco($endereco));
                $republica->setNome($nome);
                $republica->setNumero($numero);
                $republica->setQuantiaVagas($vagas);
                $republica->setTipo($tipo);
                $republica->setDataCriacao($data);
                $republica->setAtiva($ativa);
                $republicas[] = (object)$republica;
            }
            $sql->close();
        }
        $banco->close();
        return $republicas;
    }
    
    function getRepublica($codigoRepublica) {
        $republica = NULL;
        Banco::conecta();
        $banco = Banco::getBanco();
        if ($sql = $banco->prepare("SELECT REP_CODIGO, REP_NOME, REP_CODENDERECO, REP_DESCRICAO_ENDERECO, REP_NUMERO, REP_CODBAIRRO, REP_CODCIDADE, REP_QUANTIAVAGAS, REP_TIPO, REP_DATACRIACAO, REP_ATIVA FROM TB_REPUBLICA WHERE REP_CODIGO=? AND REP_ATIVA='S';")) {
            $sql->bind_param('i',$codigoRepublica);
            $sql->execute();
            $sql->bind_result($id, $nome, $endereco, $descricaoEndereco, $numero, $bairro, $cidade, $vagas,$tipo, $data, $ativa);
            while ($sql->fetch()) {
                $republica = new Republica();
                $de = new DAOEndereco();
                $dc = new DAOCidade();
                $db = new DAOBairro();
                $republica->setBairro($db->getBairro($bairro));
                $republica->setCidade($dc->getCidade($cidade));
                $republica->setCodigo($id);
                $republica->setDescricaoEndereco($descricaoEndereco);
                $republica->setEndereco($de->getEndereco($endereco));
                $republica->setNome($nome);
                $republica->setNumero($numero);
                $republica->setQuantiaVagas($vagas);
                $republica->setTipo($tipo);
                $republica->setDataCriacao($data);
                $republica->setAtiva($ativa);
            }
            $sql->close();
        }
        $banco->close();
        return $republica;
    }
    
    function addRepublica(Republica $republica) {
        if(is_a($republica->getBairro(), 'Bairro')){
            $bairro = $republica->getBairro()->getCodigo();
        }else{
            $bairro = NULL;
        }
        if(is_a($republica->getCidade(), 'Cidade')){
            $cidade = $republica->getCidade()->getCodigo();
        }else{
            $cidade = NULL;
        }
        if(is_a($republica->getEndereco(), 'Endereco')){
            $endereco = $republica->getEndereco()->getCodigo();
        }else{
            $endereco = NULL;
        }
        $tipo=$republica->getTipo();
        $descricaoEndereco = $republica->getDescricaoEndereco();
        $nome = $republica->getNome();
        $numero = $republica->getNumero();
        $vagas = $republica->getQuantiaVagas();
        Banco::conecta();
        $banco = Banco::getBanco();
        $lastid=-1;
        if($sql = $banco->prepare("INSERT INTO TB_REPUBLICA VALUES (DEFAULT, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), default);")){
            $sql->bind_param('sissiiis',$nome, $endereco, $descricaoEndereco, $numero, $bairro, $cidade, $vagas, $tipo);
            $sql->execute();
            $lastid = $sql->insert_id;
            $sql->close();
        }
        $banco->close();
        return $lastid;
    }
    function deleteRepublica($codigoRepublica) {
        Banco::conecta();
        $banco = Banco::getBanco();
        if($sql = $banco->prepare("UPDATE TB_REPUBLICA SET REP_ATIVA='N' WHERE REP_CODIGO=?;")){
            $sql->bind_param('i',$codigoRepublica);
            $sql->execute();
            $sql->close();
        }
        $banco->close();
    }
    
    function updateRepublica(Republica $republica){
        Banco::conecta();
        $banco = Banco::getBanco();
        $codigo = $republica->getCodigo();
        $nome = $republica->getNome();
        $descricao = $republica->getDescricaoEndereco();
        if(!is_a($republica->getEndereco(), 'Endereco')){
            $endereco = NULL;
        }else{
            $endereco = $republica->getEndereco()->getCodigo();
        }
        
        $numero = $republica->getNumero();
        
        if(!is_a($republica->getBairro(),'Bairro')){
            $bairro = NULL;
        }else{
            $bairro = $republica->getBairro()->getCodigo();
        }
        
        if(!is_a($republica->getCidade(), 'Cidade')){
            $cidade = NULL;
        }else{
            $cidade = $republica->getCidade()->getCodigo();
        }
        $tipo=$republica->getTipo();
        
        $vagas = $republica->getQuantiaVagas();
        
         if ($sql = $banco->prepare("UPDATE TB_REPUBLICA SET REP_NOME = ?, REP_CODENDERECO = ?, REP_DESCRICAO_ENDERECO = ?, REP_NUMERO = ?, REP_CODBAIRRO = ?, REP_CODCIDADE = ?, REP_QUANTIAVAGAS = ?, REP_TIPO=? WHERE REP_CODIGO = ?")) {
            $sql->bind_param('sissiisii',$nome, $endereco, $descricao, $numero, $bairro, $cidade, $vagas, $tipo, $codigo);
            $sql->execute();
            $sql->close();
        }
        $banco->close();
        
    }
}
?>
